package material.adapterAndFacade.iterenum;

import java.util.Enumeration;
import java.util.Iterator;

/**
 * 因为我们将枚举追配成迭代器，适配器需要实现迭代器接口
 * 适配器必须看起来就像是一个迭代器。
 */
public class EnumeratorIterator implements Iterator {
    Enumeration enumeration;

    /**
     * 我们利用组合的方式，将枚举组合进入适配器中，所以用一个实例变量记录枚举。
     *
     * @param enumeration
     */
    public EnumeratorIterator(Enumeration enumeration) {
        this.enumeration = enumeration;
    }

    /**
     * 选代器的hasNext()方法其实是委托给枚举的hasMoreElements()方法。
     *
     * @return
     */
    @Override
    public boolean hasNext() {
        return enumeration.hasMoreElements();
    }

    /**
     * 而选代器的next()方法其实是委托给枚举的nextElement()方法
     *
     * @return
     */
    @Override
    public Object next() {
        return enumeration.nextElement();
    }

    /**
     * 很不幸，我们不能支持选代器的remove()方法，所以必须放弃。
     * 在这里、我们的做法是抛出一个异常
     */
    @Override
    public void remove() {
        throw new UnsupportedOperationException();
    }
}
